#include<iostream>
#include"Common.hpp"
#include"InetAddr.hpp"

//./tcpclient ip port
void Usage(std::string proc)
{
    std::cerr<<"Usage: "<<proc<<" ip port"<<std::endl;
}
int main(int argc, char* argv[])
{
    if(argc!= 3)//命令行数量必须等于三，不等于三的话就告诉用户如何进行使用
    {
        Usage(argv[0]);
        exit(USAGE_ERR);
    }    
    std::string serverip=argv[1];//服务器的ip
    uint16_t serverport=std::stoi(argv[2]);//服务器的端口号

    //1、创建套接字
    InetAddr serveraddr(serverip,serverport);
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        std::cerr<<" socket error"<<std::endl;
        exit(SOCKET_ERROR);
    }
    //2、客户端不需要显示的bind,随机方式选择端口号
    //2、直接向目标服务器发起连接的请求,我们需要服务器的端口和ip
    InetAddr serveraddr(serverip,serverport);
    int n=connect(sockfd,serveraddr.NetAddrptr(),serveraddr.NetAddrlen());//传入地址和长度就行了
    if(n<0)
    {
        std::cerr<<" connect error"<<std::endl;
        exit(CONNECT_ERROR);
    }
    
    //ehco client
    while(true)
    {
        std::string line;
        std::cout<<"input message:";    
        std::getline(std::cin,line);//从键盘中获取用户输入

        write(sockfd,line.c_str(),line.size());//将数据写进去
        char buffer[1024];
        ssize_t size=read(sockfd,buffer,sizeof(buffer)-1);
        if(size>0)
        {
            buffer[size]=0;
            std::cout<<"server echo:"<<buffer<<std::endl;
        }


    }

    close(sockfd);//直接将套接字关闭了
    return 0;
}